#ifndef _SEM_H_
#define _SEM_H_

#include <linux/sched.h> // 用到了task_struct

/* 定义因某种信号量而阻塞的队列 */
#define QUE_LEN 16
struct semaphore_queue
{
    int front;
    int rear;
    // 信号量表征资源的使用情况，进程因缺少资源而阻塞，挂在该信号量的等待队列上；
    struct task_struct *wait_tasks[QUE_LEN];
};

typedef struct semaphore_queue sem_queue;

/* 定义 sem_t */
struct semaphore_t
{
    int value;      // 信号量的值
    int occupied;   // 是否被使用了
    char name[32];  // 信号量的名字
    struct semaphore_queue wait_queue;
};

typedef struct semaphore_t sem_t;

#endif
